Inter-Task Communication
#include "mpi.h"
#include <stdio.h>
#include <string.h>
main(int argc, char *argv[]) {
int numtasks, rank, dest, source, rc, count;
char inmsg[30], outmsg0[]="Hello Task 1",outmsg1[]="You are Welcome Task 0";
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (rank == 0) { // task 0 sends to task 1 and waits to receive a return message
dest = 1;
source = 1;
MPI_Send(&outmsg0,strlen(outmsg0), MPI_CHAR, dest, 0, MPI_COMM_WORLD);
printf("\nTask 0 has sent its message to Task 1. \n");
MPI_Recv(&inmsg, 30, MPI_CHAR, source, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("Task 0 received this message from Task 1: %s\n\n", inmsg);
}
else if (rank == 1) { // task 1 waits for task 0 message then returns a message
dest = 0;
source = 0;
MPI_Recv(&inmsg,30, MPI_CHAR, source, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("Task 1 received this message: %s\n", inmsg);
printf("Task 1 has not sent its message to Task 0 yet.\n\n");
MPI_Send(&outmsg1,strlen(outmsg1), MPI_CHAR, dest, 1, MPI_COMM_WORLD);
}
MPI_Finalize();
}
The Output, Why?